package ZmiennaLingwistyczna;

import PrzestrzenCiagla.CiaglyZbiorRozmyty;
import Zbiory.Element;

public class WartoscLingwistyczna {

	protected String etykieta;
	protected CiaglyZbiorRozmyty zbior;
	protected ModyfikatorLingwistyczny modyfikator;
	
	public WartoscLingwistyczna(String etykieta, CiaglyZbiorRozmyty zbior) {
		this(etykieta, zbior, null);
	}
	
	public WartoscLingwistyczna(String etykieta, CiaglyZbiorRozmyty zbior, ModyfikatorLingwistyczny modyfikator) {
		super();
		this.etykieta = etykieta;
		this.zbior = zbior;
		this.modyfikator = modyfikator;
	}

	public String getEtykieta() {
		return etykieta;
	}
	
	public ModyfikatorLingwistyczny getModyfikator() {
		return modyfikator;
	}

	public void setModyfikator(ModyfikatorLingwistyczny modyfikator) {
		this.modyfikator = modyfikator;
	}

	public CiaglyZbiorRozmyty getZbior() {
		return zbior;
	}
	
	public float getPrzynaleznosc(Element element){
		if(modyfikator != null){
			return (float) Math.pow(getZbior().getPrzynaleznosc(element),modyfikator.getWspolczynnik());
		}
		return getZbior().getPrzynaleznosc(element);
	}
	
	public float getPrzynaleznosc(float x){
		return getPrzynaleznosc(new Element(x, 1.0f));
	}
	
	public boolean czyNalezy(Element element){
		if(getPrzynaleznosc(element) > 0.0f){
			return true;
		}
		return false;
	}	

	@Override
	public String toString() {
		if(modyfikator !=null )
			return modyfikator + " " + etykieta;
		
		return etykieta;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((etykieta == null) ? 0 : etykieta.hashCode());
		result = prime * result
				+ ((modyfikator == null) ? 0 : modyfikator.hashCode());
		result = prime * result + ((zbior == null) ? 0 : zbior.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		WartoscLingwistyczna other = (WartoscLingwistyczna) obj;
		if (etykieta == null) {
			if (other.etykieta != null)
				return false;
		} else if (!etykieta.equals(other.etykieta))
			return false;
		if (modyfikator == null) {
			if (other.modyfikator != null)
				return false;
		} else if (!modyfikator.equals(other.modyfikator))
			return false;
		if (zbior == null) {
			if (other.zbior != null)
				return false;
		} else if (!zbior.equals(other.zbior))
			return false;
		return true;
	}


	
	
	
}
